package com.dp1.deliversoft.algorithm;

import java.util.ArrayList;

import com.dp1.deliversoft.entidad.Constantes;
import com.dp1.deliversoft.entidad.Vehiculo;

public class AdministracionVehiculos {
	int nMotos = 40;
	int nAutos = 20;
	ArrayList<Vehiculo> listaAutos;
	ArrayList<Vehiculo> listaMotos;
	ArrayList<Vehiculo> listaVehiculos;
	ArrayList<Vehiculo> listaAutosDisponibles;
	ArrayList<Vehiculo> listaMotosDisponibles;
	
	public void inicializarVehiculos(int cMotos, int cAutos) {
		this.nMotos = cMotos;
		this.nAutos = cAutos;
		
		listaAutos = new ArrayList<Vehiculo>();
		for (int i = 0; i < nAutos; i++) {
			Vehiculo v = new Vehiculo(i, Constantes.tipoAuto,
					Vehiculo.EstDisponible);
			listaAutos.add(v);
			listaVehiculos.add(v);
		}
		listaMotos = new ArrayList<Vehiculo>();
		for (int i = 0; i < nMotos; i++) {
			Vehiculo v = new Vehiculo(i + nMotos, Constantes.tipoMoto,
					Vehiculo.EstDisponible);
			listaMotos.add(v);
			listaVehiculos.add(v);
		}
	}

	public int calcularCantVehiculosLibres_tradicional() { // deberia optimizarse con un
		// rango de tiempo
		int cant = 0;
		for (int i = 0; i < listaAutos.size(); i++) {
			if (listaAutos.get(i).getEstadoVehiculo() == Vehiculo.EstDisponible) {
				cant++;
			}
		}
		for (int i = 0; i < listaMotos.size(); i++) {
			if (listaMotos.get(i).getEstadoVehiculo() == Vehiculo.EstDisponible) {
				cant++;
			}
		}
		return cant;
	}
	
	public Vehiculo getMotoDisponible_tradicional() {
		for (int i = 0; i < nMotos; i++) {
			if (listaMotos.get(i).getEstadoVehiculo() == Vehiculo.EstDisponible)
				return listaMotos.get(i);
		}
		return null;
	}

	public Vehiculo getAutoDisponible_tradicional() {
		for (int i = nAutos; i < nAutos; i++) {
			if (listaAutos.get(i).getEstadoVehiculo() == Vehiculo.EstDisponible)
				return listaAutos.get(i);
		}
		return null;
	}
	
	public boolean hayVehiculoDisponible_v2(){
		if (listaAutosDisponibles.size()+listaMotosDisponibles.size()>0){
			return true;
		}
		else
			return false;
	}
	
	public boolean hayAutoDisponible_v2(){
		if (listaAutosDisponibles.size()>0){
			return true;
		}
		else
			return false;
	}
	public boolean hayMotoDisponible_v2(){
		if (listaMotosDisponibles.size()>0){
			return true;
		}
		else
			return false;
	}
	
	public Vehiculo getMotoDisponible_v2() {
		if (listaMotosDisponibles.size()>0)
		{
			Vehiculo v = listaMotosDisponibles.get(0);
			return v;
		}
		return null;
	}

	public Vehiculo getAutoDisponible_v2() {
		if (listaAutosDisponibles.size()>0)
		{
			Vehiculo v = listaAutosDisponibles.get(0);
			return v;
		}
		return null;
	}

	public ArrayList<Vehiculo> getListaAutos() {
		return listaAutos;
	}

	public void setListaAutos(ArrayList<Vehiculo> listaAutos) {
		this.listaAutos = listaAutos;
	}

	public ArrayList<Vehiculo> getListaMotos() {
		return listaMotos;
	}

	public void setListaMotos(ArrayList<Vehiculo> listaMotos) {
		this.listaMotos = listaMotos;
	}

	public ArrayList<Vehiculo> getListaVehiculos() {
		return listaVehiculos;
	}

	public void setListaVehiculos(ArrayList<Vehiculo> listaVehiculos) {
		this.listaVehiculos = listaVehiculos;
	}

	public ArrayList<Vehiculo> getListaAutosDisponibles() {
		return listaAutosDisponibles;
	}

	public void setListaAutosDisponibles(ArrayList<Vehiculo> listaAutosDisponibles) {
		this.listaAutosDisponibles = listaAutosDisponibles;
	}

	public ArrayList<Vehiculo> getListaMotosDisponibles() {
		return listaMotosDisponibles;
	}

	public void setListaMotosDisponibles(ArrayList<Vehiculo> listaMotosDisponibles) {
		this.listaMotosDisponibles = listaMotosDisponibles;
	}
	
	
}
